# -*- coding: utf-8 -*-

from odoo import models, fields, api


# class todo(models.Model):
#     _name = 'todo.todo'

#     name = fields.Char()
#     value = fields.Integer()
#     value2 = fields.Float(compute="_value_pc", store=True)
#     description = fields.Text()
#
#     @api.depends('value')
#     def _value_pc(self):
#         self.value2 = float(self.value) / 100


class TodoTask(models.Model):
    _name = 'todo.todo'  # 模型的名称 对应数据库表名称 todo_todo
    _description = 'TodoTask Model'  # 模型描述

    # 模型字段 对应数据库字段
    name = fields.Char('描述', require=True)
    is_done = fields.Boolean('已完成？')
    """
    我们添加了一个 Selection 类型的字段 priority，并且指定了三个可供选择的程度类型，一般情况下，如果一个字段只有固定的几种可选值，
    通常都会选择使用 Selection 字段，它接受一个元组列表作为参数，其中元组的组成为 (value, string)，左边的是数据库中存储的值，
    右边的是一个用于界面显示的描述。
    此处我们还给这个字段添加了默认值 todo，表示当一个待办事项被创建后，如果没有指定紧急程度，将默认是待办状态。
    我们可以为任意类型的字段添加默认值。
    """
    priority = fields.Selection([
        ('todo', '待办'),
        ('normal', '普通'),
        ('urgency', '紧急'),
    ], default='todo', string='紧急程度')

    deadline = fields.Datetime('截至时间')
    is_expired = fields.Boolean('已过期', compute='_compute_is_expired')
    # Many2one(关联对象名) # 多对一
    category_id = fields.Many2one('todo.category', string='分类')

    @api.depends('deadline')
    @api.multi
    def _compute_is_expired(self):
        for record in self:
            if record.deadline:
                record.is_expired = record.deadline < fields.Datetime.now()
            else:
                record.is_expired = False


# 一对多关系原则：少的一方做主表 ，多的一方作为从表，从表指向主表    外键放在从表中

class TodoCategory(models.Model):
    _name = 'todo.category'
    _description = '分类'

    # 首先对记录进行排序（按时间最近排序，然后按标题排序），添加如下代码：
    # _order = 'date_release desc, name'

    name = fields.Char(u'名称')
    # One2many(关联的模型对象名，关联对象的字段名) # 一对多
    task_ids = fields.One2many('todo.todo', 'category_id', string=u'待办事项')
    count = fields.Integer(u'任务数量', compute='_compute_task_count')

    @api.depends('task_ids')
    @api.multi
    def _compute_task_count(self):
        for record in self:
            record.count = len(record.task_ids)
